/**
 * 云对象的loading效果
 * loading：是否显示加载框。实行了handleLoading统一控制，在这里loading失效，全部都是false
 * config：相关的配置信息
 */
module.exports = (loading, config) => {
	// 该参数固定为false。有handleLoading统一处理
	loading = false
	const {
		loadingText = '正在加载中...', // 显示的loading内的提示文字。默认值为：加载中...
		mask = true, // 是否使用透明遮罩，配置为true时不可点击页面其他内容。默认值为：true
		errType = 'toast', // 错误信息展示方式，可取值：modal（弹框，默认）、toast（toast消息框）。默认值为：modal
		retry = true, // 是否显示重试按钮。仅在type为modal时生效。用户点击重试按钮时将重新请求调用的方法，默认为false
	} = config || {} // 配置信息
	return {
		customUI: !loading, // 是否取消自动展示的交互界面。默认为false，配置为true时取消自动展示的交互提示界面，以下配置均不再生效
		loadingOptions: { // loading相关配置
			title: loadingText, // 显示的loading内的提示文字。默认值为：加载中...
			mask // 是否使用透明遮罩，配置为true时不可点击页面其他内容。默认值为：true
		},
		errorOptions: { // 错误界面相关配置
			type: errType, // 错误信息展示方式，可取值：modal（弹框，默认）、toast（toast消息框）。默认值为：modal
			retry // 是否展示重试按钮，仅在type为modal时生效。用户点击重试按钮时将重新请求调用的方法，默认为false
		},
		// 转化云对象内未捕获的错误，或客户端网络错误
		parseSystemError(error = {}) {
			if (loading) {
				var {
					objectName, // 云对象名
					methodName, // 方法名
					params, // 调用方法时传的参数，注意params是一个数组
					code, errCode, // 请求返回的错误码。errCode一定有
					message, errMsg // 请求返回的错误信息。errMsg一定有
				} = error
				if (errMsg.indexOf('request:fail timeout') > -1 || errMsg.indexOf('Response timeout for') > -1) {
					errMsg = '请求超时'
				}
				return {
					errMsg // 用于展示的错误信息
				}
			}
			return {
				errMsg: undefined
			}
		}
	}
}